import type { LayoutPositionType } from '../../types/constants'
import type { Checkbox } from './index'
import { PROJECT_PREFIX } from '../../types/constants'

export interface CheckboxOption<T extends string = string> {
  label: string
  value: T
  disabled?: boolean
  /**
   * 是否将选项状态持久化到localStorage
   * @default false
   */
  persist?: boolean
  /**
   * 自定义存储键名（未指定时使用value）
   */
  storageKey?: string
  onInit?: (checked: boolean, context: Checkbox<T>) => void
}

export interface CheckboxProps<T extends string = string> {
  /**
   * 复选框ID（必填）
   */
  id: string
  /**
   * 复选框标签文本
   */
  label?: string
  /**
   * 标签文本位置
   */
  labelTextPosition?: 'left' | 'right' | 'top' | 'bottom'
  /**
   * 选项列表
   */
  options: CheckboxOption<T>[]
  /**
   * 复选框位置
   */
  position?: LayoutPositionType
  /**
   * 当前选中值（数组）
   */
  selectedValues?: T[]
  /**
   * 是否显示全选功能
   */
  showSelectAll?: boolean
  /**
   * 标签提示信息
   */
  title?: string
  /**
   * 是否自动加载/保存选项状态
   * @default false
   */
  autoPersist?: boolean
  /**
   * 存储前缀（避免键名冲突）
   */
  storagePrefix?: string
  /**
   * 存储键名分隔符
   */
  storageSeparator?: string
  /**
   * 自定义存储键名
   */
  storageKey?: string
  /**
   * 是否使用合并存储模式
   * @default true
   */
  useMergedStorage?: boolean
  /**
   * 值变更回调
   */
  onChange?: (value: string, isChecked: boolean) => void
}

export const DEFAULT_CHECKBOX_PROPS: Partial<CheckboxProps> = {
  label: '',
  labelTextPosition: 'left',
  showSelectAll: true,
  position: 'right',
  selectedValues: [],
  autoPersist: true,
  storagePrefix: PROJECT_PREFIX,
  useMergedStorage: true,
  storageSeparator: '-',
}
